package br.com.sig.cadastro.parceiro.presentation.action;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.jboss.seam.international.status.builder.BundleKey;

import br.com.sig.business.exception.BaseException;
import br.com.sig.cadastro.business.model.bo.AtividadeComercialBO;
import br.com.sig.cadastro.business.model.entity.AtividadeComercial;
import br.com.sig.cadastro.parceiro.business.model.bo.ParceiroBO;
import br.com.sig.cadastro.parceiro.business.model.entity.Parceiro;
import br.com.sig.cadastro.pessoas.business.model.entity.Pessoa;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaFisica;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaJuridica;
import br.com.sig.cadastro.pessoas.business.model.enumeration.TipoPessoa;
import br.com.sig.presentation.action.BaseListAction;

@Named
@ViewScoped
public class ParceiroList extends BaseListAction<Parceiro> {

	private static final long serialVersionUID = 1756429845093986913L;
	
	private TipoPessoa tipoPessoa;
	
	private List<AtividadeComercial> resultListAtividadeComercial;
	
	@Inject
	private ParceiroBO parceiroBO;
	
	@Inject
	private AtividadeComercialBO atividadeComercialBO;	

	@PostConstruct
	public void init() {
		setService(parceiroBO);
	}
	
	@Override
	protected Parceiro createInstance() {
		Parceiro parceiro = super.createInstance();
		parceiro.setPessoa(new Pessoa());
		return parceiro;
	}
	
	public List<AtividadeComercial> getResultListAtividadeComercial() {		
		try {
			if (this.resultListAtividadeComercial == null) {
				return atividadeComercialBO.findAll("nome", true);
			}
		} catch (BaseException e) {
			e.printStackTrace();
			messages.error(new BundleKey("messages", "error.find"));
		}
		
		return this.resultListAtividadeComercial;		
	}

	public void setResultListAtividadeComercial(
			List<AtividadeComercial> resultListAtividadeComercial) {
		this.resultListAtividadeComercial = resultListAtividadeComercial;
	}

	public TipoPessoa getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(TipoPessoa tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
		
		if (this.tipoPessoa != null) {
			if (TipoPessoa.FISICA.equals(getTipoPessoa())) {
				getInstance().setPessoa(new PessoaFisica());
			} else {
				getInstance().setPessoa(new PessoaJuridica());
			}
		} else {
			getInstance().setPessoa(new Pessoa());
		}
	}	
}